package main

import (
	"context"
	"github.com/kataras/iris/v12"
	"github.com/kataras/iris/v12/mvc"
	"iris_product/backend/web/controllers"
	"iris_product/bootstrap"
	"iris_product/common"
	"iris_product/datasource"
	"iris_product/repositories"
	"iris_product/services"
	"log"
)

func main() {
	app := iris.New()
	// 设置日志级别
	app.Logger().SetLevel("debug")
	// 初始化日志
	common.BuildIrisLog(app)
	// 加载模板
	template := iris.HTML("./backend/web/views",".html").
		Layout("shared/layout.html").Reload(true)
	app.RegisterView(template)
	// 加载静态文件
	app.HandleDir("/assets","./backend/web/assets")
	// 出现异常跳转到指定页面
	app.OnAnyErrorCode(func(ctx iris.Context) {
		ctx.ViewData("message",ctx.Values().GetStringDefault("message","访问的页面出错!"))
		ctx.ViewLayout("")
		ctx.View("shared/error.html")
	})
	// 连接mysql
	db,err := common.NewMysqlConn()
	if err != nil {
		log.Printf("mysql连接错误:" +err.Error())
		return
	}
	// 初始化gorm数据库连接
	datasource.InitGormDb()

	ctx,cancelFunc := context.WithCancel(context.Background())
	defer cancelFunc()
	// 注册product控制器
	respProduct := repositories.NewProductManager("product",db)
	productService := services.NewProductService(respProduct)
	productParty := app.Party("/product")
	productApp := mvc.New(productParty)
	productApp.Register(ctx,productService)
	productApp.Handle(new(controllers.ProductController))

	// 注册order控制器
	//orderRepository := repositories.NewOrderManager("order",db)
	//orderService := services.NewOrderService(orderRepository)
	//orderApp := mvc.New(app.Party("/order"))
	//orderApp.Register(ctx,orderService)
	//orderApp.Handle(new(controllers.OrderController))

	// 统一注册控制器
	initApp := &bootstrap.InitApp{
		IrisApp:app,
		Ctx: ctx,
		Db: db,
	}
	initApp.Bootstrap()


	// 启动服务
	app.Run(
		iris.Addr("localhost:8080"),
		// 忽略iris框架的错误
		iris.WithoutServerError(iris.ErrServerClosed),
		// 让程序自身尽可能地进行优化
		iris.WithOptimizations,
		)


}
